<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // console.log(axios)
        // axios()
        // axios.get()
        // axios.post()

        // 构造函数
        function Axios(config) {
            // 初始化
            this.defauls = config   // 创建 defauls 默认属性
            this.intercepters = {
                request: {},
                response: {},
            }
        }
        // 原型添加相关方法
        Axios.prototype.request = function (config) {
            console.log('发送 ajax 请求，类型为：' + config.method);
        }
        Axios.prototype.get = function (config) {
            return this.request({ method: 'get' })
        }
        Axios.prototype.post = function (config) {
            return thisrequest({ method: 'post' })
        }

        // 声明函数
        function createInstance(config) {
            // 实例化对象
            let context = new Axios(config) // context.get() context.post() 不能当作函数使用：context()
            // 创建请求函数
            let instance = Axios.prototype.request.bind(context)    // 是一个函数 instance({}) 此时不能这样用：instance.get instance.post
            // 将 axios.prototype 对象中的方法添加到 instance 中
            Object.keys(Axios.prototype).forEach(key => {
                instance[key] = Axios.prototype[key].bind(context)
            })
            // 为 instance 函数对象添加属性 default 和 interceptors
            Object.keys(context).forEach(key => {
                instance[key] = context[key]
            })
            return instance
        }

        let axios = createInstance()
        axios.get({})
    </script>
</body>

</html>